#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 1e5 + 5;

int n, k, c;
vector<int> ad[maxn*2];
int dep[maxn]; 
int dep2[maxn]; // 拷贝一份, 因为 以其他节点 都需要从 1 移动过来
void dfs(int u, int d, int p){
	dep[u]  =d;
	for (int to:ad[u]) {
		if (to == p) {
			continue;
		}
		dfs(to, d+1, u);
	}
}

void solve(){
	cin>>n>>k>>c;
	for (int i=1;i<n;i++) {
		int a, b;
		cin>>a>>b;
		ad[a].push_back(b);
		ad[b].push_back(a);
	}
	dfs(1, 0, 0); // 求出 最深的那个节点的位置
	int pos = 0;
	int mx = 0;
	for (int i=1;i<=n;i++) {
		if (dep[i] > mx) {
			pos = i;
			mx = dep[i];
		}
		dep2[i] = dep[i];
	}
	
	// 再 以 pos 为根节点进行遍历
	memset(dep, 0, sizeof(dep));
	dfs(pos, 0, 0);
	int ans = 0;
	for (int i=1;i<=n;i++) {
		ans = max(ans, dep[i]*k - c*dep2[i]);
	}
	cout << ans << '\n';
	
	
	// 因为多组输入, 所以每次处理后都需要重新初始化为 0
	for (int i=1;i<maxn*2;i++) {
		ad[i].clear();
	}
	memset(dep, 0, sizeof(dep));
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while(t--){
		solve();
	}
	return 0;
}
